package Monitor;

import Factory.AgriculturalMachine;
import Factory.SmartHarvester;
import Factory.SmartSeeder;
import Factory.SmartSprayer;
import Factory.SmartTractor;
import Observer.EnvironmentData;
import Observer.EnvironmentSensorNetwork;

import java.util.ArrayList;
import java.util.List;

public class MachineMonitor {
    private List<AgriculturalMachine> machines = new ArrayList<>();

    // 添加要监控的农机
    public void addMachine(AgriculturalMachine machine) {
        machines.add(machine);
    }

    // 显示所有农机的当前状态
    public void displayAllMachinesStatus() {
        for (AgriculturalMachine machine : machines) {
            System.out.println(machine.getStatusDescription());
            System.out.println("-------------------------");
        }
    }

    // 显示特定农机的状态
    public void displayMachineStatus(AgriculturalMachine machine) {
        System.out.println(machine.getStatusDescription());
    }

  /*  // 定期监控所有农机状态
    public void startMonitoring(int intervalSeconds) {
        Thread monitorThread = new Thread(() -> {
            try {
                while (true) {
                    displayAllMachinesStatus();
                    Thread.sleep(intervalSeconds * 1000);
                }
            } catch (InterruptedException e) {
                System.out.println("监控已停止");
            }
        });
        monitorThread.setDaemon(true);
        monitorThread.start();
    }*/
    // 移除 startMonitoring 自动循环，改为手动显示
    public void displayMachineStatusOnce(AgriculturalMachine machine) {
        System.out.println(machine.getStatusDescription());
    }


    // 测试监控功能
    public static void main(String[] args) {
        // 创建环境传感器网络
        EnvironmentSensorNetwork sensorNetwork = new EnvironmentSensorNetwork();

        // 创建三种农机，注意需要传入 EnvironmentSensorNetwork 参数
        SmartSeeder seeder = new SmartSeeder(sensorNetwork);
        SmartHarvester harvester = new SmartHarvester(sensorNetwork);
        SmartSprayer sprayer = new SmartSprayer(sensorNetwork);
        SmartTractor tractor=new SmartTractor(sensorNetwork);

        // 创建监控器
        MachineMonitor monitor = new MachineMonitor();
        monitor.addMachine(seeder);
        monitor.addMachine(harvester);
        monitor.addMachine(sprayer);
        monitor.addMachine(tractor);

        // 开始监控，每5秒更新一次状态
//        monitor.startMonitoring(5);

        // 模拟农机工作流程
        try {
            // 启动所有农机
            /*Thread.sleep(2000);
            seeder.start();
            harvester.start();
            sprayer.start();*/

            // 执行任务
            for (int i = 0; i < 10; i++) {
                // 模拟环境数据变化
                if (i == 2) {
                    // 模拟恶劣天气：强风
                    EnvironmentData badWeatherData = new EnvironmentData(
                            0.5,   // 土壤湿度
                            6.7,   // 土壤pH值
                            28.0,  // 温度
                            0.8,   // 湿度
                            25.0   // 风速（强风）
                    );
                    sensorNetwork.setEnvironmentData(badWeatherData);
                } else if (i == 6) {
                    // 模拟良好天气
                    EnvironmentData goodWeatherData = new EnvironmentData(
                            0.6,   // 土壤湿度
                            6.8,   // 土壤pH值
                            22.0,  // 温度
                            0.6,   // 湿度
                            5.0    // 风速（微风）
                    );
                    sensorNetwork.setEnvironmentData(goodWeatherData);
                }

                seeder.executeTask();
                harvester.executeTask();
                sprayer.executeTask();
                tractor.executeTask();
                monitor.displayAllMachinesStatus();

                Thread.sleep(1000);

                // 模拟暂停和恢复
                if (i == 3) {
                    seeder.pause();
                    harvester.pause();
                    sprayer.pause();
                    tractor.pause();
                    System.out.println("===== 所有农机暂停 =====");
                    Thread.sleep(2000);
                    seeder.resume();
                    harvester.resume();
                    sprayer.resume();
                    tractor.resume();
                    System.out.println("===== 所有农机恢复 =====");
                }
            }

            // 停止所有农机
            seeder.stop();
            harvester.stop();
            sprayer.stop();
            tractor.stop();
            Thread.sleep(2000);


        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
